home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / banging_the_metal / qdos / qdos4amiga2 / romsrc / sys / qdos3_asm < prev    next >
Text File  |  2000-01-03  |  39KB  |  1,772 lines

  1. */beginfile QDOS3_asm
  2. ; --------------------------------------------------------------
  3. ; QDOS3_asm - The QDOS kernel
  4. ;       - last modified 06/09/95
  5. ; QDOS-Amiga sources by Rainer Kowallik
  6. ;    ...latest changes by Mark J Swift
  7. ; --------------------------------------------------------------
  8.  
  9. ; --------------------------------------------------------------
  10. ; Main Microdrive system was here in JS ROM
  11. L01230:
  12.  
  13. ; --------------------------------------------------------------
  14. ;*/beginoverlay
  15. ;*/beginfilling
  16. ;NOP0195A:
  17. ;     DCB.w     ($195A-(NOP0195A-ORGN))/2,$4E71
  18. ;L0195A:
  19. ;*/endfilling
  20. ;*/endoverlay
  21. ; --------------------------------------------------------------
  22. ; Trap clock related Trap #1 calls (d0=$13, $14 $15)
  23. MT_RCLCK:
  24. MT_SCLCK:
  25. MT_ACLCK:
  26.     moveq    #0,d0
  27.     bra    L003B6
  28. ;*/beginoverlay
  29. ;*/beginfilling
  30. NOP01992:
  31.     DCB.w    ($1992-(NOP01992-ORGN))/2,$4E71
  32. L01992:
  33. ;*/endfilling
  34. ;*/endoverlay
  35. ; --------------------------------------------------------------
  36. ;  screen printing routine for trap #3, d0=5/$9-$36
  37. ;  this routine is extremely slow - it should be speeded up
  38. ; --------------------------------------------------------------
  39. ; is called by screen device driver to support TRAP #3
  40. TRAP3_UP:
  41.     MOVE.B    $43(A0),-(A7)    ; cursor status
  42.     BLE.S    L019A4        ; cursor inactive
  43.     MOVEM.W    D0-D2,-(A7)    ; calling params of TRAP #3
  44.     JSR    GET_CURPos(PC)    ;*/undomodify BSR GET_CURPos
  45.                 ; get cursor position
  46.     MOVEM.W    (A7)+,D0-D2
  47. L019A4:
  48.     CMPI.B    #5,D0        ; IO.SBYTE ?
  49.     BNE.S    L019B0
  50.     JSR    L01A4C(PC)    ;*/undomodify BSR L01A4C
  51.     BRA.S    L019CE
  52. L019B0:
  53.     CMPI.W    #$36,D0        ; only SD.xx calls (screen
  54.                 ; output)
  55.     BHI.S    L019EE
  56.     CMPI.W    #$9,D0
  57.     BLT.S    L019EE
  58.     BGT.S    L019C2
  59.     JSR    (A2)        ; do extended operation
  60.                 ; (SD.EXTOP)
  61.     BRA.S    L019CE
  62. L019C2:
  63.     ADD.B    D0,D0        ; adjust D0 for displacement
  64.     MOVEA.W    JMP_TB_19f2-$14(PC,D0.W),A3
  65.     LSR.L    #1,D0
  66.     JSR    TRAP3_UP(PC,A3.W)
  67. L019CE:
  68.     TST.B    (A7)+        ; test cursor status
  69.     BLE.S    L019E8        ; inactive
  70.     TST.L    D0        ; any errors ?
  71.     BNE.S    L019E8
  72.     TST.B    $43(A0)        ; test cursor status
  73.     BGE.S    L019E8        ; inactive
  74.     MOVEM.L    D0-D2,-(A7)    ; save cursor status
  75.     JSR    SD_CURE(PC)    ;*/undomodify BSR SD_CURE
  76.                 ; reposition cursor
  77.     MOVEM.L    (A7)+,D0-D2
  78. L019E8:
  79.     TST.L    D0
  80.     RTS
  81. L019EC:
  82.     ADDQ.L    #4,A7
  83. L019EE:
  84.     MOVEQ    #-15,D0        ; Bad parameter
  85.     BRA.S    L019CE
  86. JMP_TB_19f2:
  87.     DC.W    SD_PXENQ-TRAP3_UP ; $0A
  88.     DC.W    SD_CHENQ-TRAP3_UP ; $0B
  89.     DC.W    SD_BORDR-TRAP3_UP ; $0C
  90.     DC.W    SD_WDEF-TRAP3_UP    ; $0D
  91.     DC.W    SD_CURE-TRAP3_UP    ; $0E
  92.     DC.W    SD_CURS-TRAP3_UP    ; $0F
  93.     DC.W    SD_POS-TRAP3_UP    ; $10
  94.     DC.W    SD_TAB-TRAP3_UP    ; $11
  95.     DC.W    SD_NL-TRAP3_UP    ; $12
  96.     DC.W    SD_PCOL-TRAP3_UP    ; $13
  97.     DC.W    SD_NCOL-TRAP3_UP    ; $14
  98.     DC.W    SD_PROW-TRAP3_UP    ; $15
  99.     DC.W    SD_NROW-TRAP3_UP    ; $16
  100.     DC.W    SD_PIXP-TRAP3_UP    ; $17
  101.     DC.W    SD_SCROL-TRAP3_UP ; $18
  102.     DC.W    SD_SCRTP-TRAP3_UP ; $19
  103.     DC.W    SD_SCRBT-TRAP3_UP ; $1A
  104.     DC.W    SD_PAN-TRAP3_UP    ; $1B
  105.     DC.W    L019EC-TRAP3_UP    ; Bad parameter return $1C
  106.     DC.W    L019EC-TRAP3_UP    ; dito             $1D
  107.     DC.W    SD_PANLN-TRAP3_UP ; $1E
  108.     DC.W    SD_PANRT-TRAP3_UP ; $1F
  109.     DC.W    SD_CLEAR-TRAP3_UP ; $20
  110.     DC.W    SD_CLRTP-TRAP3_UP ; $21
  111.     DC.W    SD_CLRBT-TRAP3_UP ; $22
  112.     DC.W    SD_CLRLN-TRAP3_UP ; $23
  113.     DC.W    SD_CLRRT-TRAP3_UP ; $24
  114.     DC.W    SD_FOUNT-TRAP3_UP ; $25
  115.     DC.W    SD_RECOL-TRAP3_UP ; $26
  116.     DC.W    SD_SETPA-TRAP3_UP ; $27
  117.     DC.W    SD_SETST-TRAP3_UP ; $28
  118.     DC.W    SD_SETIN-TRAP3_UP ; $29
  119.     DC.W    SD_SETFL-TRAP3_UP ; $2A
  120.     DC.W    SD_SETUL-TRAP3_UP ; $2B
  121.     DC.W    SD_SETMD-TRAP3_UP ; $2C
  122.     DC.W    SD_SETSZ-TRAP3_UP ; $2D
  123.     DC.W    SD_FILL-TRAP3_UP    ; $2E
  124.     DC.W    L01BF2-TRAP3_UP    ; $2F ; not declared
  125.     DC.W    SD_POINT-TRAP3_UP ; $30
  126.     DC.W    SD_LINE-TRAP3_UP    ; $31
  127.     DC.W    SD_ARC-TRAP3_UP    ; $32
  128.     DC.W    SD_ELLIPs-TRAP3_UP ; $33
  129.     DC.W    SD_SCALE-TRAP3_UP ; $34
  130.     DC.W    SD_FLOOD-TRAP3_UP ; $35
  131.     DC.W    SD_GCUR-TRAP3_UP    ; $36
  132. ; ******************************************************
  133. ; *       Grafical subroutines             *
  134. ; ******************************************************
  135. L01A4C:
  136.     JSR    L01BCE(PC)    ;*/undomodify BSR L01BCE
  137.                 ; IO.SBYTE
  138.     BLT.S    L01A76
  139.     MOVE.B    D1,D2
  140.     MOVE.L    $18(A0),D0    ; window top left side
  141.     ADD.L    $22(A0),D0    ; cursor position
  142.     MOVE.W    D0,D1
  143.     SWAP    D0
  144.     MOVE.B    $42(A0),D3    ; attributes for printing
  145.                 ; like underline or colour
  146.     LEA    $3A(A0),A1    ; strip colour mask
  147.     MOVEM.L    $2A(A0),A2-A3    ; font address
  148.     JSR    OUT_CHAR(PC)    ;*/undomodify BSR OUT_CHAR
  149.     BRA    SD_NCOL
  150. L01A76:
  151.     RTS
  152. ; Return window size and cursor position in pixel
  153. L01A78:
  154. SD_PXENQ:
  155.     JSR    L01BF2(PC)    ;*/undomodify BSR L01BF2
  156.     MOVE.L    $1C(A0),(A1)    ; window size
  157.     MOVE.L    $22(A0),$4(A1)    ; cursor position
  158.     MOVEQ    #0,D0
  159.     RTS
  160. ; return window size and cursor position in characters
  161. L01A8A:
  162. SD_CHENQ:
  163.     BSR.S    SD_PXENQ
  164.     MOVE.L    D1,-(A7)
  165.     MOVE.W    $26(A0),D0
  166.     BSR.S    L01AAA
  167.     BSR.S    L01AAA
  168.     SUBQ.W    #6,A1        ;*/undomend SUBQ.L
  169.                 ;*/note #6 sign extended long
  170.     MOVE.W    $28(A0),D0    ; cursor Y-increment
  171.     BSR.S    L01AAA
  172.     BSR.S    L01AAA
  173.     MOVE.L    (A7)+,D1
  174.     SUBA.W    #$A,A1        ;*/undomend SUBA.L
  175.                 ;*/note #$A sign extended long
  176.     MOVEQ    #0,D0
  177.     RTS
  178. L01AAA:
  179.     MOVEQ    #0,D1
  180.     MOVE.W    (A1),D1
  181.     DIVU    D0,D1
  182.     MOVE.W    D1,(A1)
  183.     ADDQ.W    #4,A1        ;*/undomend ADDQ.L #4,A1
  184.     RTS
  185. SD_WDEF    ; redifines a window
  186.     MOVEM.W    D1-D4,-(A7)
  187.     JSR    L01C1C(PC)    ;*/undomodify BSR L01C1C
  188.     MOVEM.W    (A1),D0-D3
  189.     EXG    D0,D2
  190.     EXG    D1,D3
  191.     MOVEQ    #0,D4
  192.     BCLR    D4,D0
  193.     BCLR    D4,D2
  194.     TST.W    D2
  195.     BEQ    L01B64
  196.     TST.W    D3
  197.     BEQ    L01B64
  198.     MOVE.W    D0,D4
  199.     ADD.W    D2,D4
  200.     BCS    L01B64
  201.     CMPI.W    #$0200,D4
  202.     BHI.S    L01B64
  203.     MOVE.W    D1,D4
  204.     ADD.W    D3,D4
  205.     BCS.S    L01B64
  206.     CMPI.W    #$0100,D4
  207.     BHI.S    L01B64
  208.     CLR.W    $20(A0)        ; border width
  209.     BRA.S    L01B12
  210. SD_BORDR ; Sets the border width and colour
  211.     MOVE.B    D1,$47(A0)    ; border colour
  212. L01AFC    MOVEM.W    D1-D4,-(A7)
  213.     CMP.W    $20(A0),D2    ; border width
  214.     BEQ.S    L01B0A
  215.     JSR    L01C1C(PC)    ;*/undomodify BSR L01C1C
  216. L01B0A    MOVEM.W    $18(A0),D0-D4
  217.     BSR.S    L01B6C
  218. L01B12    MOVE.W    $02(A7),D4
  219.     CMPI.W    #$0100,D4
  220.     BHI.S    L01B64
  221.     BSR.S    L01B6E
  222.     MOVEM.W    D0-D4,$18(A0)    ; window start and size
  223.     BEQ.S    L01B60
  224.     MOVE.W    (A7),D1
  225.     CMPI.B    #$80,D1
  226.     BEQ.S    L01B60
  227.     MOVEA.L    A7,A1
  228.     JSR    L027D8(PC)    ;*/undomodify BSR L027D8
  229.     MOVE.W    $1A(A0),D1
  230.     BSR.S    L01B6C
  231.     NEG.W    D4
  232.     EXG    D4,D3
  233.     JSR    L025BE(PC)    ;*/undomodify BSR L025BE
  234.     ADD.W    D4,D1
  235.     SUB.W    D3,D1
  236.     JSR    L025BE(PC)    ;*/undomodify BSR L025BE
  237.     ADD.W    D3,D1
  238.     SUB.W    D4,D1
  239.     EXG    D4,D3
  240.     ADD.W    D4,D4
  241.     EXG    D4,D2
  242.     JSR    L025BE(PC)    ;*/undomodify BSR L025BE
  243.     ADD.W    D4,D0
  244.     SUB.W    D2,D0
  245.     JSR    L025BE(PC)    ;*/undomodify BSR L025BE
  246. L01B60    MOVEQ    #0,D0
  247.     BRA.S    L01B66
  248. L01B64    MOVEQ    #-$04,D0
  249. L01B66    MOVEM.W    (A7)+,D1-D4
  250.     RTS
  251. L01B6C    NEG.W    D4
  252. L01B6E    ADD.W    D4,D1
  253.     ADD.W    D4,D4
  254.     SUB.W    D4,D3
  255.     BLE.S    L01B82
  256.     ADD.W    D4,D0
  257.     ADD.W    D4,D4
  258.     SUB.W    D4,D2
  259.     BLE.S    L01B82
  260.     ASR.W    #2,D4
  261.     RTS
  262. L01B82:
  263.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L
  264.                 ;*/note #4 sign extended long
  265.     BRA.S    L01B64
  266. ; enables the cursor
  267. L01B86:
  268. SD_CURE:
  269.     MOVEQ    #1,D2
  270.     TST.B    $43(A0)
  271.     BGT.S    L01BCA
  272.     JSR    L01BF2(PC)    ;*/undomodify BSR.S L01BF2
  273.                 ;*/undomodify nop
  274.     BRA.S    L01BAA
  275. ; suppress the cursor
  276. L01B94:
  277. SD_CURS:
  278.     MOVEQ    #0,D2
  279.     TST.B    $43(A0)        ; cursor flag
  280.     BGT.S    L01BAA
  281.     MOVE.B    D2,$43(A0)    ; cursor flag
  282.     BRA.S    L01BCA
  283. L01BA2:
  284. GET_CURPos:
  285.     MOVE.B    $43(A0),D2    ; cursor flag
  286.     BEQ.S    L01BCA
  287.     NEG.B    D2
  288. L01BAA:
  289.     JSR    L01BCE(PC)    ;*/undomodify BSR.S L01BCE
  290.                 ;*/undomodify nop
  291.     BLT.S    L01BCC
  292.     MOVE.B    D2,$43(A0)
  293.     MOVE.L    $18(A0),D0
  294.     ADD.L    $22(A0),D0
  295.     MOVE.W    D0,D1
  296.     SWAP    D0
  297.     MOVEM.W    $26(A0),D2-D3
  298.     JSR    L02548(PC)    ;*/undomodify BSR L02548
  299. L01BCA:
  300.     MOVEQ    #0,D0
  301. L01BCC:
  302.     RTS
  303. ; verify cursor in window
  304. L01BCE:
  305.     MOVE.L    $22(A0),D0
  306.     BMI.S    L01BEE
  307.     TST.W    D0
  308.     BMI.S    L01BEE
  309.     ADD.L    $26(A0),D0
  310.     CMP.W    $1E(A0),D0
  311.     BHI.S    L01BEE
  312.     SWAP    D0
  313.     CMP.W    $1C(A0),D0
  314.     BHI.S    L01BEE
  315.     MOVEQ    #0,D0
  316.     RTS
  317. L01BEE    MOVEQ    #-4,D0        ; Out of range
  318.     RTS
  319. L01BF2:
  320.     TST.B    $48(A0)        ; new line status
  321.     BEQ.S    L01C1A
  322. L01BF8:
  323.     MOVEM.L    D0-D2/A1,-(A7)
  324.     JSR    SD_NL(PC)    ;*/undomodify BSR.S SD_NL
  325.                 ;*/undomodify nop
  326.     BEQ.S    L01C12
  327.     MOVEQ    #$18,D0
  328.     MOVE.W    $28(A0),D1    ; cursor Y-increment
  329.     NEG.W    D1
  330.     JSR    SD_SCROL(PC)    ;*/undomodify BSR SD_SCROL
  331.     CLR.W    $22(A0)        ; cursor position X
  332. L01C12:
  333.     SF    $48(A0)        ; new line status explicit
  334.     MOVEM.L    (A7)+,D0-D2/A1
  335. L01C1A    RTS
  336. L01C1C    CLR.L    $22(A0)        ; set cursor position to 0,0
  337.     BRA.S    L01C9A
  338. SD_POS    ; Position cursor at row/column
  339.     MULU    $28(A0),D2    ; Y-increment for cursor
  340.     BRA.S    L01C2C
  341. SD_TAB    ; position cursor at column
  342.     MOVE.W    $24(A0),D2    ; cursor Y position
  343. L01C2C    MULU    $26(A0),D1    ; X-increment for cursor
  344.     BRA.S    SD_PIXP
  345. SD_NL    ; position cursor at next row
  346.     MOVEQ    #0,D1
  347.     MOVE.W    $24(A0),D2    ; Y-position for cursor
  348.     ADD.W    $28(A0),D2    ; Y-increment for cursor
  349.     BRA.S    SD_PIXP
  350. SD_PCOL    ; Position cursor on a new line
  351.     MOVE.W    $22(A0),D1    ; X-position for cursor
  352.     SUB.W    $26(A0),D1    ; X-increment for cursor
  353.     BRA.S    L01C50
  354. SD_NCOL    ; position cursor on previus column
  355.     MOVE.W    $22(A0),D1    ; X-position for cursor
  356.     ADD.W    $26(A0),D1    ; X-increment for cursor
  357. L01C50    MOVE.W    $24(A0),D2    ; Y-position for cursor
  358.     BRA.S    SD_PIXP
  359. SD_PROW    ; position cursor on next column
  360.     MOVE.W    $24(A0),D2    ; Y-position for cursor
  361.     SUB.W    $28(A0),D2    ; Y-increment for cursor
  362.     BRA.S    L01C68
  363. SD_NROW    ; Position cursor on previus row
  364.     MOVE.W    $24(A0),D2    ; Y-position for cursor
  365.     ADD.W    $28(A0),D2    ; Y-increment for cursor
  366. L01C68    MOVE.W    $22(A0),D1    ; X-position for cursor
  367. SD_PIXP    ; position cursor on next row
  368.     MOVE.W    D1,D0
  369.     BLT.S    L01CA2
  370.     ADD.W    $26(A0),D0    ; X-increment for cursor
  371.     CMP.W    $1C(A0),D0    ; X-size of window
  372.     BHI.S    L01CA2
  373.     MOVE.W    D2,D0
  374.     BLT.S    L01CA2
  375.     ADD.W    $28(A0),D0    ; Y-increment for cursor
  376.     CMP.W    $1E(A0),D0    ; Y-size of window
  377.     BHI.S    L01CA2
  378. L01C88    bsr.l    MDTSTFIX     ;*/modify BTST #3,$34(A6)
  379.     nop            ;*/modify
  380.     BEQ.S    L01C94
  381.     BCLR    #0,D1
  382. L01C94    MOVEM.W    D1-D2,$22(A0)    ; set cursor position
  383. L01C9A    SF    $48(A0)        ; set explicit new line
  384.                 ; status
  385.     MOVEQ    #0,D0
  386.     RTS
  387. L01CA2    MOVEQ    #-4,D0        ; Out of range
  388.     RTS
  389. SD_RECOL ; recolour a window
  390.     MOVEQ    #0,D0
  391.     LEA    L025D6(PC),A2
  392.     BRA.S    L01CE0
  393. SD_CLEAR ; clear all of a window
  394.     JSR    L01C1C(PC)    ;*/undomodify BSR L01C1C
  395.     MOVEQ    #$20,D0
  396. SD_CLRTP ; clear top of window
  397. SD_CLRBT ; clear bottom of window
  398. SD_CLRLN ; clear cursor line
  399. SD_CLRRT ; clear right hand end of cursor line
  400.     SUBI.W    #$20,D0
  401.     LEA    L025BE(PC),A2
  402.     BRA.S    L01CDC
  403. SD_SCROL ; scroll all of a window
  404. SD_SCRTP ; scroll top of a window
  405. SD_SCRBT ; scroll the bottom of a window
  406.     SUBI.W    #$18,D0
  407.     LEA    L025FE(PC),A2
  408.     BRA.S    L01CDC
  409. SD_PAN    ; pans all of a window
  410. SD_PANLN ; pans cursor line
  411. SD_PANRT ; pans right hand end of cursor line
  412.     SUBI.W    #$1B,D0
  413.     LEA    L02648(PC),A2
  414.     bsr.l    MDTSTFIX     ;*/modify BTST #3,$34(A6)
  415.     nop            ;*/modify
  416.     BEQ.S    L01CDC
  417.     BCLR    #0,D1
  418. L01CDC    LEA    $36(A0),A1    ; paper colour mask
  419. L01CE0    MOVEM.L    D4-D5,-(A7)
  420.     MOVE.W    D1,D4
  421.     MOVE.W    D0,D5
  422.     MOVEM.W    $18(A0),D0-D3    ; window top left hand pixel
  423.                 ; and size
  424.     SUBQ.W    #1,D5
  425.     BLT.S    L01D22
  426.     BGT.S    L01CFA
  427.     MOVE.W    $24(A0),D3    ; Y-position for cursor
  428.     BRA.S    L01D22
  429. L01CFA    ADD.W    $24(A0),D1    ; Y-position for cursor
  430.     SUBQ.W    #2,D5
  431.     BGE.S    L01D12
  432.     SUB.W    $24(A0),D3    ; Y-position for cursor
  433.     MOVE.W    $28(A0),D5    ; Y-increment for cursor
  434.     ADD.W    D5,D1
  435.     SUB.W    D5,D3
  436.     BLE.S    L01D24
  437.     BRA.S    L01D22
  438. L01D12    MOVE.W    $28(A0),D3    ; Y-increment for cursor
  439.     TST.W    D5
  440.     BEQ.S    L01D22
  441.     ADD.W    $22(A0),D0    ; X-position for cursor
  442.     SUB.W    $22(A0),D2    ; X-position for cursor
  443. L01D22    JSR    (A2)        ; 2648 / 256E / 25BE / 25FE
  444. L01D24    MOVEQ    #0,D0
  445.     MOVEM.L    (A7)+,D4-D5
  446.     RTS
  447. SD_FILL    ; fills rectangular block within window
  448.     LEA    L025BE(PC),A3
  449.     BTST    #$03,$42(A0)    ; XOR character / graphics
  450.     BEQ.S    L01D3C
  451.     LEA    L025CA(PC),A3
  452. L01D3C    MOVEA.L    A1,A2
  453.     SUBQ.W    #4,A7        ;*/undomend SUBQ.L #4,A7
  454.     MOVEA.L    A7,A1
  455.     JSR    L027D8(PC)    ;*/undomodify BSR L027D8
  456.     MOVE.L    #$01FF01FF,D3
  457.     bsr.l    MDTSTFIX     ;*/modify BTST #3,$34(A6)
  458.     nop            ;*/modify
  459.     BEQ.S    L01D58
  460.     BCLR    #$10,D3
  461. L01D58    MOVEM.L    (A2),D0/D2
  462.     EXG    D0,D2
  463.     AND.L    D3,D0
  464.     AND.L    D3,D2
  465.     MOVE.L    D0,D3
  466.     ADD.L    D2,D3
  467.     CMP.W    $1E(A0),D3    ; Window y-size
  468.     BGT.S    L01D88
  469.     SWAP    D3
  470.     CMP.W    $1C(A0),D3    ; Window x-size
  471.     BGT.S    L01D88
  472.     ADD.L    $18(A0),D0    ; window top left
  473.     MOVE.W    D2,D3
  474.     SWAP    D2
  475.     MOVE.W    D0,D1
  476.     SWAP    D0
  477.     JSR    (A3)        ; 25BE / 25CA /27D8
  478.     MOVEQ    #0,D0
  479. L01D84:
  480.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L #4,A7
  481.     RTS
  482. L01D88:
  483.     MOVEQ    #-4,D0        ; Out of range
  484.     BRA.S    L01D84
  485. ; set or reset the character fount
  486. L01D8C:
  487. SD_FOUNT:
  488.     MOVE.L    A1,D0
  489.     BGT.S    L01D96
  490. RLOC0A    MOVEA.L    #(FONT1-ORG0),A1    ;*/modify LEA FONT1,A1
  491.                 ; start of ROM char pattern
  492. L01D96:
  493.     MOVE.L    A2,D0
  494.     BGT.S    L01DA0
  495. RLOC0B    MOVEA.L    #(FONT2-ORG0),A2    ;*/modify LEA FONT2,A2
  496.                 ; second font
  497. L01DA0:
  498.     MOVEM.L    A1-A2,$2A(A0)    ; store char font address
  499.     MOVEQ    #0,D0
  500.     RTS
  501. ; -----------------------------------------------------------
  502. ; TRAP #3 with D0=$27 to $29 : set paper, strip, ink colour
  503. ; D1= colour , A0= cchannel ID
  504. ; -----------------------------------------------------------
  505. L01DAA:
  506. SD_SETPA:
  507. SD_SETST:
  508. SD_SETIN:
  509.     SUBI.W    #$27,D0        ; select paper, strip or ink
  510.     MOVE.B    D1,$44(A0,D0.W)    ; Set paper, strip or ink
  511.                 ; colour
  512.     LSL.W    #2,D0        ; now we have a long word
  513.     LEA    $36(A0,D0.W),A1    ; related colour mask
  514.     MOVEQ    #0,D0
  515.     JMP    L027D8(PC)    ;*/undomodify BRA.L L027D8
  516.                 ; calculate acording mask
  517. ; set flashing
  518. L01DBE:
  519. SD_SETFL:
  520.     bsr.l    MDTSTFIX     ;*/modify BTST #3,$34(A6)
  521.     nop            ;*/modify
  522.     BEQ.L    L01E3C        ;*/undomodify BEQ.S L01E3C
  523.                 ;*/undomodify nop
  524.     MOVEQ    #$02,D0
  525.     BRA.S    L01DD4
  526. ; Set character writing or plotting mode
  527. L01DCC:
  528. SD_SETMD:
  529.     MOVEQ    #$0C,D0
  530.     LSL.B    #2,D1
  531.     BRA.S    L01E3E
  532. ; set underline
  533. L01DD2:
  534. SD_SETUL:
  535.     MOVEQ    #$01,D0
  536. L01DD4:
  537.     TST.B    D1
  538.     SNE    D1
  539.     BRA.S    L01E3E
  540. ; set character size and spacing
  541. L01DDA:
  542. SD_SETSZ:
  543.     JSR    L01BF2(PC)    ;*/undomodify BSR L01BF2
  544.     ANDI.W    #$03,D1
  545.     ANDI.W    #$01,D2
  546.     bsr.l    MDTSTFIX     ;*/modify BTST #3,$34(A6)
  547.     nop            ;*/modify
  548.     BEQ.S    L01DF2
  549.     BSET    #$01,D1
  550. L01DF2:
  551.     MOVE.B    L01E4E(PC,D1.W),$27(A0) ; X-increment for
  552.                       ; cursor
  553.     MOVE.B    L01E52(PC,D2.W),$29(A0) ; Y-increment for
  554.                       ; cursor
  555.     LSL.B    #1,D1
  556.     OR.B    D2,D1
  557.     LSL.B    #4,D1
  558.     MOVEQ    #$70,D0
  559.     BSR.S    L01E3E
  560.     MOVE.W    $22(A0),D0    ; X-position for cursor
  561.     ADD.W    $26(A0),D0    ; X-increment for cursor
  562.     CMP.W    $1C(A0),D0    ; X-size of window
  563.     BLS.S    L01E1A
  564.     JSR    L01BF8(PC)    ;*/undomodify BSR L01BF8
  565. L01E1A:
  566.     MOVE.W    $24(A0),D0    ; Y-position for cursor
  567.     ADD.W    $28(A0),D0    ; Y-increment for cursor
  568.     CMP.W    $1E(A0),D0    ; Y-size for cursor
  569.     BLS.S    L01E4A
  570.     MOVEQ    #$18,D0
  571.     MOVEQ    #-$0A,D1
  572.     JSR    SD_SCROL(PC)    ;*/undomodify BSR SD_SCROL
  573.     SUBI.W    #$0A,$24(A0)    ; Y-position for cursor
  574.     BGE.S    L01E4A
  575.     CLR.W    $24(A0)        ; set cursor Y-position to 0
  576. L01E3C:
  577.     BRA.S    L01E4A
  578. L01E3E:
  579.     AND.B    D0,D1
  580.     NOT.B    D0
  581.     AND.B    D0,$42(A0)    ; character attributes
  582.     OR.B    D1,$42(A0)
  583. L01E4A:
  584.     MOVEQ    #0,D0
  585.     RTS
  586. L01E4E:
  587.     DC.W    $0608,$0C10    ; table for x-increment
  588.                 ; (6,8,12,16 pixel)
  589. L01E52:
  590.     DC.W    $0A14        ; table for y-increment
  591.                 ; (10,20 pixel)
  592. ; Sets graphics cursor position
  593. L01E54:
  594. SD_GCUR:
  595.     LEA    $18(A1),A4
  596.     JSR    L021DC(PC)    ;*/undomodify BSR L021DC
  597.     MOVE.L    L02242(PC),-(A1)    ;*/undomodify MOVE.L $2242,-(A1)
  598.     MOVE.W    L02240(PC),-(A1)    ;*/undomodify MOVE.L $2240,-(A1)
  599.     JSR    L020D8(PC)    ;*/undomodify BSR L020D8
  600.     LEA    L01E90(PC),A3
  601.     JSR    RI_A1_EXecb(PC)    ;*/undomodify BSR RI_A1_EXecb
  602.                 ; Essentially RI.EXECB
  603.     LEA    $18(A1),A1
  604.     BSR.S    L01E8A
  605.     MOVE.W    (A1)+,D1
  606.     BSR.S    L01E8A
  607.     MOVE.W    $1E(A0),D2
  608.     SUB.W    (A1)+,D2
  609.     BSET    #$07,$42(A0)    ; graphics positioned
  610.                 ; characters
  611.     JMP    L01C88(PC)    ;*/undomodify BRA L01C88
  612. L01E8A:
  613.     MOVEQ    #$02,D0
  614.     JMP    RI_EXEC_a1(PC)    ;*/undomodify BRA RI_EXEC_a1
  615. ; table for calculation of pixel graphics
  616. L01E90:
  617.     DC.B    $12,$10,$16,$EE,$DC,$0C,$0E,$FA,$0C,$FB,$E8,$E2
  618.     DC.B    $0C,$0E,$0E,$F4,$0A,$F5,0,0
  619. ;    ABS / DUP RCL ? RCL ? - * RCL ?  - STO ? RCL ? RCL ?
  620. ;    - * * RCL ? + STO ? END
  621. ; set window scale
  622. L01EA4:
  623. SD_SCALE:
  624.     LEA    $4A(A0),A2
  625.     MOVEQ    #$12,D0
  626. L01EAA:
  627.     MOVE.W    (A1)+,(A2)+
  628.     SUBQ.W    #2,D0        ; reduction *?*
  629.     BNE.S    L01EAA
  630.     RTS
  631. ; turns area flood on and off
  632. SD_FLOOD:
  633.     MOVEA.L    A0,A4
  634.     TST.L    D1
  635.     BNE.S    L01EC2
  636.     BSR.S    L01EFA
  637.     MOVE.B    #0,$49(A4)    ; fill mode off
  638.     BRA.S    L01EF4
  639. L01EC2:
  640.     CMPI.L    #$01,D1
  641.     BNE.S    L01EE4
  642.     BSR.S    L01EFA
  643.     MOVE.B    #1,$49(A4)    ; fill mode on
  644.     MOVE.L    #$0410,D1
  645.     JSR    MM_ALCHP(PC)    ;*/undomodify BSR MM_ALCHP
  646.                 ; Allocate common heap
  647.     BNE.S    L01EF6
  648.     MOVE.L    A0,$5C(A4)    ; pointer to fill buffer
  649.     BRA.S    L01EF4
  650. L01EE4:
  651.     BTST    #0,D1
  652.     BEQ.S    L01EF0
  653.     CLR.L    $60(A4)        ; clear pointer to user
  654.                 ; defined fill vectors
  655.     BRA.S    L01EF4
  656. L01EF0:
  657.     MOVE.L    D1,$60(A4)    ; set pointer to fill
  658.                 ; vectors
  659. L01EF4:
  660.     MOVEQ    #0,D0
  661. L01EF6:
  662.     MOVEA.L    A4,A0
  663.     RTS
  664. L01EFA:
  665.     TST.B    $49(A4)        ; fill mode
  666.     BEQ.S    L01F08
  667.     MOVEA.L    $5C(A4),A0    ; pointer to fill buffer
  668.     JSR    MM_RECHP(PC)    ;*/undomodify BSR MM_RECHP
  669.                 ; release common heap
  670. L01F08:
  671.     RTS
  672. SD_POINT ; plots a point
  673.     MOVE.L    A4,-(A7)
  674.     LEA    $C(A1),A4    ; Duplicate coordinates
  675.     MOVE.L    -(A4),-(A1)
  676.     MOVE.L    -(A4),-(A1)
  677.     MOVE.L    -(A4),-(A1)
  678.     MOVEA.L    (A7)+,A4     ; and plot line
  679. SD_LINE    ; plots a line
  680.     MOVEM.L    A3/A5,-(A7)
  681.     LEA    L01F26(PC),A3
  682.     SUBQ.L    #6,A1
  683.     BRA    L02100
  684. L01F26    DC.W    1        ; displ. for point and line
  685.                 ; routine 1
  686.     DC.W    LINE_TB_end-1-*    ; calculate nothing
  687.     DC.W    L0205C-*     ; first routine for
  688.                 ; calculation
  689.     DC.W    LINE_TB-*    ; address of 2nd op. table
  690.     DC.W    L02136-*     ; second routine for
  691.                 ; calculation
  692. LINE_TB:
  693.     DC.W    $DC16,$D00C,$1616,$1616,$E8F4
  694.     ;       RCL 36 DUP RCL 48 - DUP DUP DUP DUP RCL 24 RCL
  695.     ; 12
  696.     DC.W    $0CBE,$0EFA,$EE0C,$BE0E,$DC16,$1600
  697.     ;       - RCL 66 * RCL 6 RCL 18 - RCL 66 * RCL 36 DUP
  698.     ; DUP END
  699. LINE_TB_end:
  700. SD_ARC    ; plots an arc
  701.     MOVEM.L    A3/A5,-(A7)
  702.     LEA    2(A1),A4
  703.     TST.L    (A4)+
  704.     BGT.S    L01F64
  705.     MOVEQ    #$14,D0        ; RI.NEG
  706.     JSR    RI_EXEC_a1(PC)    ;*/undomodify BSR RI_EXEC_a1
  707.                 ; essentially RI.EXEC
  708.     MOVEM.L    (A4)+,D2-D7
  709.     MOVEM.L    D2-D4,-(A4)
  710.     MOVEM.L    D5-D7,-(A4)
  711. L01F64    LEA    L01F6C(PC),A3
  712.     BRA    L02100
  713. L01F6C    DC.W    3        ; routine and table
  714.     DC.W    LINE_TB_end-1-*    ; Calculate nothing
  715.     DC.W    L0205C-*     ; first calculation routine
  716.     DC.W    ARC_TB1-*    ; $C = 12 table of operators
  717.     DC.W    L01FA8-*     ; calculation routine
  718.     DC.W    ARC_TB2-*    ; operator table
  719.     DC.W    L01FCE-*     ; RTS
  720.     DC.W    ARC_TB3-*    ; operator table
  721.     DC.W    L02136-*     ; calculation routine
  722. ARC_TB1:
  723.     DC.W    $FAEE,$0CE2,$C40E,$B810,$D00A,$F4E8,$0C16
  724.     DC.W    $160E,$A616,$0E0A,$E2CA,$101A,$160A,$160E,$1016
  725.     DC.W    $289A,$A6B2,$0A10,$24E2,$CA10,$0C00
  726. L01FA8    TST.B    -$58(A4)     ; -88(A4)
  727.     BMI.S    L01FBC
  728.     MOVE.L    L0224E(PC),-(A1)    ; PI floating point Mantissa
  729.     MOVE.W    L0224C(PC),-(A1)    ;    exponent
  730.     MOVEQ    #$0A,D0        ; RI.ADD
  731.     BSR    RI_EXEC_a1
  732. L01FBC    MOVE.L    -$1E(A4),D0
  733.     SWAP    D0
  734.     SUBQ.W    #1,D0
  735.     SWAP    D0
  736.     CMP.L    L0224C(PC),D0    ; PI ?
  737.     BLT.S    L01FCE
  738.     CLR.L    D2
  739. L01FCE    RTS
  740. ARC_TB2    ; second arithmetic commandstring from SD_ARC
  741.     DC.W    $16E2,$0A16,$0A18,$D00A,$A716,$1816,$8E0E
  742.     DC.W    $CA8E,$1016,$B9B3,$881A,$168E,$0E89,$8F94,$9B00
  743. ;    DUP RCL 30 + DUP + COS RCL 48 + STO 90 DUP COS DUP RCL 114
  744. ; *
  745. ;    RCL 54 RCL 114 / DUP STO 72 STO 78 RCL 120 SIN DUP RCL 114
  746. ; * STO 120
  747. ;    STO 114 RCL 108 STO 102 END
  748. SD_ELLIPs ; plots an ellipse
  749.     MOVEM.L    A3/A5,-(A7)
  750.     LEA    L01FFC(PC),A3
  751.     BRA    L02100
  752. L01FFA    RTS
  753. L01FFC    DC.W    3
  754.     DC.W    ELLIPS_1tb-*
  755.     DC.W    ELLIPS_Do-*
  756.     DC.W    END_ELLIps_1tb-1-* ; do nothing
  757.     DC.W    L0205C-*
  758.     DC.W    ELLIPS_2tb-*
  759.     DC.W    L01FFA-*     ; RTS
  760.     DC.W    ARC_TB3-*
  761.     DC.W    L02136-*
  762. ELLIPS_1tb:
  763.     DC.W    $E812,$E9EE,$EE12,$E80E,$EF00
  764. END_ELLIps_1tb:
  765. ELLIPS_Do:
  766.     CMPI.W    #$0801,(A1)
  767.     ADDQ.W    #6,A1        ;*/undomend ADDQ.L #6,A1
  768.     BGE.S    L02032
  769.     MOVE.L    #$6487ED51,-(A1)    ; 1.570796 = PI/2
  770.     MOVE.W    #$0801,-(A1)
  771.     LEA    L02034(PC),A3
  772.     JSR    RI_A1_EXecb(PC)    ;*/undomodify BSR RI_A1_EXecb
  773.                 ; essentially RI.EXECB
  774. L02032    RTS
  775. L02034    DC.B    $0A,$EE,$E8,$EF,$E9,0
  776. ;           + RCL 18 RCL 24 STO 18 STO 24 END
  777. ELLIPS_2tb:
  778.     DC.W    $DCC4,$160A,$E816,$0EEE,$160E,$E21A,$16E8,$0E16
  779.     DC.W    $FA0A,$16FB,$EFE2,$1816,$E80E,$1614,$F40A,$16F5
  780.     DC.W    $E900
  781. L0205C    ; called by SD_LINE and SD_ARC before coordinate
  782.     ; calculation
  783.     MOVEM.L    D0-D1/A4,-(A7)
  784.     CLR.L    -(A1)
  785.     CLR.W    -(A1)
  786.     MOVEQ    #1,D0
  787.     ROR.L    #2,D0
  788.     MOVE.W    #$0800,D1
  789.     MOVEQ    #4,D2
  790. L0206E    MOVE.L    D0,-(A1)
  791.     MOVE.W    D1,-(A1)
  792.     ADDQ.W    #1,D1
  793.     DBF    D2,L0206E
  794.     ADDQ.W    #1,(A1)
  795.     LEA    L02252(PC),A3
  796.     MOVEQ    #8,D2
  797. L02080    MOVE.W    -(A3),-(A1)
  798.     DBF    D2,L02080
  799. ;*/beginoverlay
  800. ;*/beginremove
  801. ;     MOVE.W     $1C(A0),-$1A(A6)  ; window size X
  802. ;     MOVE.W     $1E(A0),-$1E(A6)  ; Y size
  803. ;     CLR.W     -$1C(A6)
  804. ;     CLR.W     -$20(A6)
  805. ;     MOVE.W     $18(A0),-$34(A6)  ; window top left
  806. ;     MOVE.W     $1A(A0),-$38(A6)
  807. ;     CLR.W     -$36(A6)
  808. ;     CLR.W     -$3A(A6)
  809. ;     MOVE.B     $42(A0),-$23(A6)  ; character attributes
  810. ;     MOVE.B     $49(A0),-$32(A6)  ; fill mode
  811. ;     MOVE.L     $5C(A0),-$2A(A6)  ; pointer to fill buffer
  812. ;     MOVE.L     $60(A0),-$2E(A6)  ; pointer to fill vectors
  813. ;*/endremove
  814. ;*/begininsert
  815.     lea    -$3E(a6),a3
  816.     move.l    A0,(a3)+     ; channel def
  817.     clr.w    (a3)+
  818.     MOVE.W    SD_YMIN(A0),(a3)+ ; window top
  819.     clr.w    (a3)+
  820.     MOVE.W    SD_XMIN(A0),(a3)+ ; window left
  821.     MOVE.B    SD_FMOD(A0),(a3)    ; fill mode
  822.     lea    $4(a3),a3
  823.     MOVE.L    SD_FUSE(A0),(a3)+ ; pointer to fill vectors
  824.     MOVE.L    SD_FBUF(A0),(a3)+ ; pointer to fill buffer
  825.     lea    $3(a3),a3
  826.     MOVE.B    SD_CATTR(A0),(a3)+ ; character attributes
  827.     lea    $2(a3),a3
  828.     clr.w    (a3)+
  829.     MOVE.W    SD_YSIZE(A0),(a3)+ ; window Y size
  830.     clr.w    (a3)+
  831.     MOVE.W    SD_XSIZE(A0),(a3)+ ; window X size
  832. ;*/endinsert
  833.     MOVEQ    #1,D2
  834.     BSR.S    L020D8
  835.     LEA    L020EE(PC),A3    ; operation list (now
  836.     BSR    RI_A1_EXecb
  837.     MOVEM.L    (A7)+,D0-D1/A4
  838.     RTS
  839. ; -------------------------------------------------
  840. L020D8    MOVE.W    $1E(A0),-(A1)    ; Y-size of Window
  841.     SUBQ.W    #1,(A1)
  842.     MOVEQ    #$08,D0        ; Convert integer to float
  843.     BSR    RI_EXEC_a1
  844.     MOVE.L    $58(A0),-(A1)    ; scale factor (float)
  845.     MOVE.W    $56(A0),-(A1)
  846.     RTS
  847. ; -------------------------------------------------
  848. L020EE    DC.B    $12,$10,$16,$FA,$0E,$FB,$16,$F4,$0E,$F5
  849.     DC.B    $16,$EE,$0E,$EF,$E8,$0E,$E9,0
  850. ;            ABS / DUP RCL ? * STO ? DUP RCL ? * STO ?
  851. ;            DUP RCL ? * STO ? RCL ? * STO ? END
  852. L02100    MOVEM.L    D1-D7/A0/A2/A4-A6,-(A7)
  853.     link    a6,#-$3E     ;*/modify LINK A6,#-$3A
  854.     LEA    $1E(A1),A4
  855.     MOVE.W    (A3)+,D1
  856. L0210E    PEA    $02(A3)
  857.     ADDA.W    (A3),A3
  858.     BSR    RI_A1_EXecb
  859.     MOVEA.L    (A7)+,A3
  860.     PEA    $02(A3)
  861.     ADDA.W    (A3),A3
  862.     JSR    (A3)
  863.     MOVEA.L    (A7)+,A3
  864.     DBF    D1,L0210E
  865.     UNLK    A6
  866.     MOVEM.L    (A7)+,D1-D7/A0/A2/A4-A6
  867.     MOVEM.L    (A7)+,A3/A5
  868.     MOVEQ    #0,D0
  869.     RTS
  870. ; ----------------------------------------------
  871. L02136    ; called from SD_LINE and SD_ARC and SD_ELLIPs
  872.     MOVEM.L    D0-D1/A3,-(A7)
  873.     TST.L    D2
  874.     BEQ    L021C4
  875.     MOVE.L    D2,-$10(A6)
  876.     MOVEQ    #-1,D3
  877.     move.l    (a6),a3        ;*/modify
  878.     btst    #3,SV_MCSTA(a3)    ;*/modify BTST #3,$28034
  879.     BEQ.S    L02158
  880.     ADD.L    D2,D2
  881.     LSL.L    #1,D3
  882.     ADDQ.W    #1,-$30(A4)
  883. L02158    MOVE.W    D3,-$22(A6)
  884.     NEG.L    D2
  885.     MOVE.L    D2,-4(A6)
  886.     MOVE.L    D2,-12(A6)
  887.     CLR.L    -8(A6)
  888.     BSR    L020D8
  889.     MOVEQ    #$10,D0        ; RI.DIV
  890.     BSR    RI_EXEC_a1
  891.     BSR.S    L021DC
  892.     LEA    L02218(PC),A3
  893.     BSR    RI_A1_EXecb
  894.     BSR.S    L021CA
  895.     MOVE.L    D1,D2
  896.     BSR.S    L021CA
  897.     MOVE.L    D1,D3
  898.     BSR.S    L021CA
  899.     MOVE.L    D1,D4
  900.     BSR.S    L021CA
  901.     MOVE.L    D1,D6
  902.     BSR.S    L021CA
  903.     MOVE.L    D1,D7
  904.     LEA    -$60(A4),A1
  905.     BSR.S    L021D6
  906.     MOVEA.W    (A1)+,A5
  907.     LEA    -$18(A4),A1
  908.     BSR.S    L021D2
  909.     MOVE.L    (A1)+,-$18(A6)
  910.     BSR.S    L021D2
  911.     MOVE.L    (A1)+,D1
  912.     AND.W    -$22(A6),D1
  913.     MOVE.L    D1,-$14(A6)
  914.     BSR.S    L021D2
  915.     MOVE.L    (A1)+,D1
  916.     BSR.S    L021D2
  917.     MOVE.L    (A1)+,D0
  918.     AND.W    -$22(A6),D0
  919.     BSR    L02252        ; QQQQQQQQQQQQQQQQQQQQQQQ
  920.     BSR    L022CA
  921. L021C4    MOVEM.L    (A7)+,D0-D1/A3
  922.     RTS
  923. L021CA    ADDQ.W    #4,(A1)
  924.     BSR.S    L021D2
  925.     MOVE.L    (A1)+,D1
  926.     RTS
  927. L021D2    MOVEQ    #6,D0        ; RI_NLINT
  928.     BRA.S    L021D8
  929. L021D6    MOVEQ    #2,D0        ; RI_NINT
  930. L021D8    JMP    RI_EXEC_a1(PC)    ;*/undomodify BRA RI_EXEC_a1
  931. L021DC    MOVE.L    $52(A0),-(A1)    ; graphics window origin
  932.                 ; (float)
  933.     MOVE.L    $4E(A0),-(A1)    ; continues ...
  934.     MOVE.L    $4A(A0),-(A1)    ; up to here
  935.     RTS
  936. ; table to calculate convex. of arc & ellipse
  937. ARC_TB3:
  938.     DC.W    $949A,$0C82,$0E8E,$0E8E,$160E,$169A,$0E82,$160E
  939.     DC.W    $169A,$0E70,$940E,$0A71,$940E,$0A16,$7C0E,$7688
  940.     DC.W    $0E0A,$1470,$880E,$767C,$0E0A,$837D,$0000
  941. L02218    DC.B    $64,$0E,$14,$16,$F4,$0A,$F5,$E8,$0A,$E9,$0E,$14
  942.     DC.B    $16,$FA,$0A,$AC
  943. L02228    DC.B    $0E,$FB,$EE,$0A,$AC,$0E,$EF,$D0
  944.     DC.B    $AC,$10,$16,$76,$0E,$77,$16,$82,$0E,$83,$16,$0E
  945.     DC.B    $70,$0E,$71,$00
  946. L02240    DC.W    $0801        ; 1.355 (Compression factor
  947.                 ; in X direction)
  948. L02242    DC.L    $56B851EC
  949. L02246    DC.W    $07F7        ; 0.001
  950.     DC.L    $4189374C
  951. L0224C    DC.W    $0802        ; PI
  952. L0224E    DC.L    $6487ED51
  953. L02252    CMPA.L    #-1,A5
  954.     BEQ.S    L02264
  955.     TST.L    D2
  956.     BEQ.S    L022C0
  957.     TST.L    D3
  958.     BEQ.S    L022C0
  959.     BRA.S    L02266
  960. L02264:
  961.     SUBA.L    A5,A5
  962. L02266:
  963.     MOVEA.L    D3,A1
  964.     MOVEA.L    D4,A2
  965.     ADDA.L    A1,A2
  966.     MOVEA.L    D2,A3
  967.     ADDA.L    D4,A3
  968.     ADDA.L    A2,A3
  969.     ADD.L    D4,D3
  970.     NEG.L    D3
  971.     ASR.L    #1,D3
  972.     ADD.L    D7,D3
  973.     MOVE.L    D6,D4
  974.     SUB.L    D3,D4
  975.     ASR.L    #2,D2
  976.     NEG.L    D2
  977.     SUB.L    D6,D2
  978.     ASR.L    #1,D2
  979.     ADD.L    D3,D2
  980.     MOVE.L    A5,-(A7)
  981.     MOVE.L    D2,-(A7)
  982.     MOVE.L    D3,D7
  983.     MOVE.L    D4,D6
  984.     JSR    GET_PIXEladr_rel(PC);*/undomodify BSR GET_PIXEladr_rel
  985.     MOVEA.L    (A7)+,A0
  986.     MOVEA.W    #8,A4        ;*/undomend MOVEA.L
  987.                 ;*/note #8 sign extended long
  988.     MOVE.B    #$FF,-$24(A6)
  989. L022A0:
  990.     TST.L    D7
  991.     BLT.S    L022A8
  992.     TST.L    D6
  993.     BGE.S    L022C6
  994. L022A8    TST.B    -$24(A6)
  995.     BGE.S    L022B4
  996.     BSR    L0238A
  997.     BRA.S    L022B8
  998. L022B4    BSR    L023D0
  999. L022B8    CMPA.W    #0,A4
  1000.     BGT.S    L022A0
  1001.     ADDQ.L    #4,A7
  1002. L022C0    ADDQ.L    #4,A7
  1003.     JMP    L021C4(PC)    ;*/undomodify BRA L021C4
  1004. L022C6    MOVEA.L    (A7)+,A4
  1005.     RTS
  1006. L022CA:
  1007.     move.l    a0,-(a7)     ;*/insertcode
  1008.     move.l    -$3E(a6),a0    ;*/insertcode
  1009.     BSR    L0248A
  1010.     move.l    (a7)+,a0     ;*/insertcode
  1011.     BSR.S    L02330
  1012.     MOVE.L    A0,D4
  1013.     BGE.S    L022E4
  1014.     movem.l    -8(a6),d4-d5    ;*/modify MOVE.L     -4(A6),D4
  1015.                 ;*/modify MOVE.L     -8(A6),D5
  1016.     SUB.L    A1,D7
  1017.     ADD.L    A2,D6
  1018.     ADDA.L    D7,A0
  1019.     BRA.S    L022F2
  1020. L022E4    movem.l    -$10(a6),d4-d5    ;*/modify MOVE.L     -$0C(A6),D4
  1021.                 ;*/modify MOVE.L     -$10(A6),D5
  1022.     SUB.L    A2,D7
  1023.     ADD.L    A3,D6
  1024.     SUBA.L    D6,A0
  1025. L022F2    add.l    d5,d0        ;*/modify ADD.L     D4,D0
  1026.     add.l    d4,d1        ;*/modify ADD.L     D5,D1
  1027.     tst.l    d4        ;*/modify TST.L     D5
  1028.     BGE.S    L02302
  1029.     lea    $80(a5),a5    ;*/modify ADDA.L     #$80,A5
  1030.     BRA.S    L0230A
  1031. L02302    BEQ.S    L0230C
  1032.     lea    -$80(a5),a5    ;*/modify SUBA.L     #$80,A5
  1033. L0230A    SWAP    D3
  1034. L0230C    moveq    #1,d4        ;*/modify MOVEQ     #1,D5
  1035.     move.l    a3,-(a7)     ;*/insert
  1036.     move.l    (a6),a3        ;*/modify
  1037.     btst    #3,SV_MCSTA(a3)    ;*/modify BTST     #3,$28034
  1038.     move.l    (a7)+,a3     ;*/insert
  1039.     BEQ.S    L0231A
  1040.     moveq    #2,d4        ;*/modify MOVEQ     #2,D5
  1041. L0231A    tst.l    d5        ;*/modify TST.L     D4
  1042.     BGE.S    L02326
  1043.     rol.w    d4,d2        ;*/modify ROL.W     D5,D2
  1044.     BCC.S    L0232E
  1045.     SUBQ.L    #2,A5
  1046.     BRA.S    L0232E
  1047. L02326    BEQ.S    L0232E
  1048.     ror.w    d4,d2        ;*/modify ROR.W     D5,D2
  1049.     BCC.S    L0232E
  1050.     ADDQ.L    #2,A5
  1051. L0232E    BRA.S    L022CA
  1052. L02330    MOVE.W    A4,D4
  1053.     BLT.S    L02386
  1054.     SUBQ.W    #2,D4
  1055.     BGT.S    L02360
  1056.     MOVE.L    D1,D4
  1057.     SUB.L    -$18(A6),D4
  1058.     BGE.S    L02342
  1059.     NEG.L    D4
  1060. L02342    SUBQ.L    #1,D4
  1061.     BGT.S    L02360
  1062.     MOVE.L    D0,D4
  1063.     SUB.L    -$14(A6),D4
  1064.     BGE.S    L02350
  1065.     NEG.L    D4
  1066. L02350:
  1067.     exg    d5,a3        ;*/insert
  1068.     move.l    (a6),a3        ;*/modify
  1069.     btst    #3,SV_MCSTA(a3)    ;*/modify BTST     #3,$28034
  1070.     exg    d5,a3        ;*/insert
  1071.     BEQ.S    L0235C
  1072.     SUBQ.L    #1,D4
  1073. L0235C    SUBQ.L    #1,D4
  1074.     BLE.S    L02386
  1075. L02360    TST.L    D7
  1076.     BNE.S    L02368
  1077.     TST.L    D6
  1078.     BEQ.S    L02386
  1079. L02368:
  1080.     BGE.S    L02376
  1081.     TST.B    -$24(A6)
  1082.     BGT.S    L02376
  1083.     BSR.L    L0238A        ;*/undomodify BSR.S L0238A
  1084.                 ;*/undomodify nop
  1085.     BRA.S    L02330
  1086. L02376:
  1087.     TST.L    D6
  1088.     BGE.S    L02388
  1089.     TST.B    -$24(A6)
  1090.     BLT.S    L02388
  1091.     BSR.L    L023D0        ;*/undomodify BSR.S L023D0
  1092.                 ;*/undomodify nop
  1093.     BRA.S    L02330
  1094. L02386:
  1095.     ADDQ.L    #4,A7
  1096. L02388:
  1097.     RTS
  1098. L0238A    TST.L    -$04(A6)
  1099.     BNE.S    L02394
  1100.     NEG.L    -$0C(A6)
  1101. L02394    TST.L    -$08(A6)
  1102.     BNE.S    L0239E
  1103.     NEG.L    -$10(A6)
  1104. L0239E    MOVE.L    A1,D4
  1105.     NEG.L    D4
  1106.     MOVEA.L    D4,A1
  1107.     ADD.L    A2,D4
  1108.     MOVEA.L    D4,A2
  1109.     ADDA.L    A1,A2
  1110.     MOVE.L    D4,D5
  1111.     LSL.L    #2,D5
  1112.     SUB.L    A3,D5
  1113.     MOVEA.L    D5,A3
  1114.     NEG.L    D7
  1115.     SUB.L    D4,D7
  1116.     MOVE.L    A0,D5
  1117.     NEG.L    D5
  1118.     SUB.L    D6,D5
  1119.     ADD.L    D7,D5
  1120.     MOVEA.L    D5,A0
  1121.     SUB.L    D7,D6
  1122.     SUB.L    D7,D6
  1123.     SUB.L    D4,D6
  1124.     SUBQ.L    #1,A4
  1125.     MOVE.B    #1,-$24(A6)
  1126.     RTS
  1127. L023D0    TST.L    -8(A6)
  1128.     BNE.S    L023E2
  1129.     CLR.L    -4(A6)
  1130.     MOVE.L    -16(A6),-8(A6)
  1131.     BRA.S    L023F2
  1132. L023E2    TST.L    -4(A6)
  1133.     BNE.S    L023F2
  1134.     CLR.L    -8(A6)
  1135.     MOVE.L    -$0C(A6),-4(A6)
  1136. L023F2    MOVE.L    A2,D4
  1137.     LSL.L    #1,D4
  1138.     SUB.L    A3,D4
  1139.     MOVE.L    D4,D5
  1140.     SUB.L    A1,D5
  1141.     MOVEA.L    D5,A1
  1142.     SUBA.L    A3,A2
  1143.     MOVE.L    A3,D5
  1144.     NEG.L    D5
  1145.     MOVEA.L    D5,A3
  1146.     MOVE.L    A2,D5
  1147.     ASR.L    #1,D5
  1148.     NEG.L    D5
  1149.     ADD.L    D6,D5
  1150.     ADD.L    D5,D7
  1151.     MOVE.L    D6,D5
  1152.     ASR.L    #1,D5
  1153.     NEG.L    D5
  1154.     SUB.L    A0,D5
  1155.     ADD.L    D7,D5
  1156.     MOVEA.L    D5,A0
  1157.     MOVE.L    A3,D5
  1158.     ASR.L    #3,D5
  1159.     ADDA.L    D5,A0
  1160.     NEG.L    D6
  1161.     ASR.L    #1,D4
  1162.     ADD.L    D4,D6
  1163.     SUBQ.L    #1,A4
  1164.     MOVE.B    #$FF,-$24(A6)
  1165.     RTS
  1166. ; -------------------------------------------------------------
  1167. ; return pixel pattern (D2) and address (A0) relative to window
  1168. ; coordinates.
  1169. ; D0=X  D1=Y
  1170. ; -------------------------------------------------------------
  1171. GET_PIXEladr_rel:
  1172.     MOVEM.L    D0-D1,-(A7)
  1173.     CLR.L    D2        ; pixel pattern on return
  1174.     NEG.L    D1        ; x=0,y=0 is in the bottom
  1175.                 ; left corner
  1176.     SUBQ.L    #1,D1        ; y=1-512 -> 0-511
  1177.     MOVE.W    $1E(A0),D2    ; Y-size
  1178.     ADD.W    $1A(A0),D2    ; y-min (window top)
  1179.     ADD.L    D2,D1
  1180.     MOVE.W    $18(A0),D2    ; x-min (window left)
  1181.     ADD.L    D2,D0        ; reduction possible  *?*
  1182.     MOVE.L    $3E(A0),D3    ; INK colour mask
  1183.     BTST    #0,D1
  1184.     BEQ.S    L02458
  1185.     SWAP    D3
  1186. L02458:
  1187.     MOVEQ    #0,D2
  1188.     MOVE.W    #$8080,D2
  1189.     move.l    (a6),a5        ;*/insertcode
  1190.     btst    #3,SV_MCSTA(a5)    ;*/modify BTST #3,$28034
  1191.     BEQ.S    L02482
  1192.     MOVE.W    #$C0C0,D2    ; for 256 mode
  1193. L02482:
  1194.     move.l    SD_SCRB(a0),a5    ;*/modify MOVEA.L  #$20000,A5
  1195.     LSL.L    #7,D1        ; Y*128
  1196.     ADDA.L    D1,A5        ; row address
  1197.     MOVE.L    D0,D1        ; X
  1198.     LSR.L    #3,D1        ; X byte
  1199.     LSL.L    #1,D1        ; only even address
  1200.     ADDA.L    D1,A5        ; word in which the pixel
  1201.                 ; lies
  1202.     ANDI.W    #15,D0        ; extract bit
  1203.  
  1204.     ROR.W    D0,D2        ; pixel pattern in D2
  1205.     MOVEM.L    (A7)+,D0-D1
  1206.     RTS
  1207. L0248A    CMP.L    -$20(A6),D1
  1208.     BCC    L02546
  1209.     TST.B    -$32(A6)
  1210.     BEQ    L0251C
  1211.     MOVEM.L    D0-D3/A0-A1,-(A7)
  1212.     movea.l    d1,a1        ;*/modify MOVEA.L  D1,A0
  1213.     adda.l    a1,a1        ;*/modify ADDA.L     A0,A0
  1214.     adda.l    a1,a1        ;*/modify ADDA.L     A0,A0
  1215.     adda.l    #$10,a1        ;*/modify ADDA.L     #$10,A0
  1216.     adda.l    -$2A(a6),a1    ;*/modify ADDA.L     -$2A(A6),A0
  1217.     move.l    (a1),d2        ;*/modify MOVE.L     (A0),D2
  1218.     BSET    #$1F,D0
  1219.     move.l    d0,(a1)        ;*/modify MOVE.L     D0,(A0)
  1220. ;*/endoverlay
  1221.     LSL.L    #1,D0
  1222.     ASR.L    #1,D0
  1223.     LSL.L    #1,D2
  1224.     BCC.S    L02516
  1225.     ASR.L    #1,D2
  1226.     MOVE.L    D2,D4
  1227.     SUB.L    D0,D4
  1228.     BGE.S    L024C8
  1229.     EXG    D0,D2
  1230. L024C8    TST.L    D0
  1231.     BGE.S    L024CE
  1232.     MOVEQ    #0,D0
  1233. L024CE    TST.L    D2
  1234.     BLT.S    L02516
  1235.     CMP.L    -$1C(A6),D0
  1236.     BGE.S    L02516
  1237.     CMP.L    -$1C(A6),D2
  1238.     BLT.S    L024E2
  1239.     MOVE.L    -$1C(A6),D2
  1240. L024E2    SUB.L    D0,D2
  1241.     ADD.L    -$36(A6),D0
  1242.     NEG.L    D1
  1243.     ADD.L    -$3A(A6),D1
  1244.     ADD.L    -$20(A6),D1
  1245.     SUBQ.L    #1,D1
  1246.     MOVE.W    D3,-(A7)
  1247.     MOVE.W    D3,-(A7)
  1248.     SWAP    D3
  1249.     MOVE.W    D3,-(A7)
  1250.     MOVE.W    D3,-(A7)
  1251.     MOVEA.L    A7,A1
  1252.     MOVEQ    #$01,D3
  1253.     BTST    #$03,-$23(A6)
  1254.     BNE.S    L02510
  1255.     JSR    L025BE(PC)    ;*/undomodify BSR L025BE
  1256.     BRA.S    L02514
  1257. L02510    JSR    L025CA(PC)    ;*/undomodify BSR L025CA
  1258. L02514    ADDQ.L    #8,A7
  1259. L02516    MOVEM.L    (A7)+,D0-D3/A0-A1
  1260.     RTS
  1261. L0251C    CMP.L    -$1C(A6),D0
  1262.     BCC.S    L02546
  1263.     SWAP    D2
  1264.     SWAP    D3
  1265.     MOVE.L    D3,D4
  1266.     AND.L    D2,D4
  1267.     BTST    #$03,-$23(A6)
  1268.     BNE.S    L02540
  1269.     MOVE.L    (A5),D5
  1270.     NOT.L    D2
  1271.     AND.L    D2,D5
  1272.     NOT.L    D2
  1273.     OR.L    D4,D5
  1274.     MOVE.L    D5,(A5)
  1275.     BRA.S    L02542
  1276. L02540    EOR.L    D4,(A5)
  1277. L02542    SWAP    D2
  1278.     SWAP    D3
  1279. L02546    RTS
  1280. ; ------------------------------------------------------------
  1281. L02548:
  1282.     MOVEM.L    D0-D7/A0-A6,-(A7)
  1283.     BSR.S    L0256A
  1284.     MOVE.L    #$FF00FF,D6
  1285.     MOVE.L    D6,D7
  1286.     BRA.S    L025D0
  1287. L02558    MOVE.L    (A1),D6
  1288.     MOVE.W    D6,D7
  1289.     SWAP    D7
  1290.     MOVE.W    D6,D7
  1291.     MOVE.W    (A1),D6
  1292.     BTST    #0,D1
  1293.     BNE.S    L0256A
  1294.     EXG    D6,D7
  1295. L0256A    LSL.W    #7,D1        ; Y*128
  1296.     move.l    SD_SCRB(a0),a1    ;*/modify MOVEA.L  #$20000,A1
  1297.     nop            ;*/modify
  1298.     ADDA.W    D1,A1        ; Row address
  1299.     LSL.W    #6,D3
  1300.     MOVEA.W    D3,A2
  1301.     ADDA.L    A2,A2
  1302.     MOVE.W    D0,D1
  1303.     LSR.W    #4,D1
  1304.     LSL.W    #2,D1
  1305.     ADDA.W    D1,A1
  1306.     ADDA.L    A1,A2
  1307.     MOVEA.W    #128,A3
  1308.     LSR.W    #2,D1
  1309.     ADD.W    D0,D2
  1310.     MOVE.W    D2,D3
  1311.     SUBQ.W    #1,D3
  1312.     ASR.W    #4,D3
  1313.     SUB.W    D1,D3
  1314.     MOVEA.W    D3,A5
  1315.     ADDA.W    A5,A5
  1316.     ADDA.W    A5,A5
  1317.     BSR.S    L025AA
  1318.     MOVE.L    D5,D4
  1319.     MOVE.W    D2,D0
  1320.     BSR.S    L025AA
  1321.     NOT.L    D5
  1322.     BNE.S    L025A8
  1323.     MOVEQ    #-1,D5
  1324. L025A8    RTS
  1325. L025AA    MOVEQ    #-1,D5
  1326.     ANDI.W    #15,D0
  1327.     LSR.W    D0,D5
  1328.     MOVE.W    D5,D0
  1329.     LSL.L    #8,D5
  1330.     MOVE.W    D0,D5
  1331.     LSL.L    #8,D5
  1332.     MOVE.B    D0,D5
  1333.     RTS
  1334. ; ----------------------------------------------------------
  1335. L025BE    MOVEM.L    D0-D7/A0-A6,-(A7)
  1336.     BSR.S    L02558
  1337. L025C4    LEA    L026EC(PC),A6
  1338.     BRA.S    L025F4
  1339. L025CA    MOVEM.L    D0-D7/A0-A6,-(A7)
  1340.     BSR.S    L02558
  1341. L025D0    LEA    L026F4(PC),A6
  1342.     BRA.S    L025F4
  1343. L025D6    MOVEM.L    D0-D7/A0-A6,-(A7)
  1344.     MOVEA.L    A1,A4
  1345.     BSR.S    L0256A
  1346.     ADD.W    D3,D3
  1347.     ADDQ.W    #1,D3
  1348.     bsr.l    MDTSTFIX     ;*/modify BTST #3,$34(A6)
  1349.     nop            ;*/modify
  1350.     BNE.S    L025F0
  1351.     LEA    L0273E(PC),A6
  1352.     BRA.S    L025F4
  1353. L025F0    LEA    L02708(PC),A6
  1354. L025F4    BSR    L026E6
  1355.     MOVEM.L    (A7)+,D0-D7/A0-A6
  1356.     RTS
  1357. ; -------------------------------------------------------------
  1358. L025FE    MOVEM.L    D0-D7/A0-A6,-(A7)
  1359.     BSR    L02558
  1360.     MOVE.W    $12(A7),D2
  1361.     NEG.W    D2
  1362.     LSL.W    #7,D2
  1363.     BVS.S    L025C4
  1364.     BGT.S    L02630
  1365.     EXG    A2,A1
  1366.     MOVEA.W    #$FF80,A3
  1367.     ADDA.L    A3,A1
  1368.     ADDA.L    A3,A2
  1369.     MOVE.W    A1,D0
  1370.     SUB.W    A2,D0
  1371.     TST.B    D0
  1372.     BNE.S    L02626
  1373.     EXG    D6,D7
  1374. L02626    LEA    0(A1,D2.W),A4
  1375.     CMPA.L    A2,A4
  1376.     BLS.S    L025C4
  1377.     BRA.S    L02638
  1378. L02630    LEA    0(A1,D2.W),A4
  1379.     CMPA.L    A4,A2
  1380.     BLS.S    L025C4
  1381. L02638    LEA    L026FC(PC),A6
  1382.     SUBA.W    D2,A2
  1383.     BSR    L026E6
  1384.     ADDA.W    D2,A2
  1385.     BRA    L025C4
  1386. L02648    MOVEM.L    D0-D7/A0-A6,-(A7)
  1387.     BSR    L02558
  1388.     SWAP    D3
  1389.     MOVE.W    $12(A7),D2
  1390.     NEG.W    D2
  1391.     BGT.S    L0268A
  1392.     NEG.W    D2
  1393.     MOVE.W    D2,D3
  1394.     ANDI.W    #$0F,D3
  1395.     ADDI.W    #$10,D3
  1396.     SWAP    D3
  1397.     LSR.W    #4,D2
  1398.     CMP.W    D3,D2
  1399.     BHI    L025C4
  1400.     SUB.W    D2,D3
  1401.     MOVEA.W    #$FFFC,A0
  1402.     ADDA.W    A5,A1
  1403.     ADDA.W    A5,A2
  1404.     MOVEA.L    A1,A4
  1405.     LSL.W    #2,D2
  1406.     SUBA.W    D2,A4
  1407.     MOVE.L    A5,D2
  1408.     NEG.L    D2
  1409.     MOVEA.L    D2,A5
  1410.     EXG    D4,D5
  1411.     BRA.S    L026AC
  1412. L0268A    MOVEA.W    #$04,A0
  1413.     MOVE.W    D2,D3
  1414.     ANDI.W    #$0F,D3
  1415.     NEG.W    D3
  1416.     ADDI.W    #$10,D3
  1417.     SWAP    D3
  1418.     LSR.W    #4,D2
  1419.     CMP.W    D3,D2
  1420.     BHI    L025C4
  1421.     SUB.W    D2,D3
  1422.     LSL.W    #2,D2
  1423.     LEA    0(A1,D2.W),A4
  1424. L026AC    ADDQ.W    #1,D3
  1425.     LEA    L02770(PC),A6
  1426.     BRA    L025F4
  1427. L026B6    MOVE.W    D3,D0
  1428.     BMI.S    L026EA
  1429.     EXG    D6,D7
  1430.     MOVE.L    (A1),-(A7)
  1431.     MOVE.L    0(A1,A5.W),-(A7)
  1432.     JMP    (A6)
  1433. L026C4    SUBQ.W    #4,A1
  1434. L026C6    MOVE.L    (A1),D0
  1435.     AND.L    D5,D0
  1436.     MOVE.L    D5,D1
  1437.     NOT.L    D1
  1438.     AND.L    (A7)+,D1
  1439.     OR.L    D1,D0
  1440.     MOVE.L    D0,(A1)
  1441.     SUBA.L    A5,A1
  1442.     MOVE.L    (A1),D0
  1443.     AND.L    D4,D0
  1444.     MOVE.L    D4,D1
  1445.     NOT.L    D1
  1446.     AND.L    (A7)+,D1
  1447.     OR.L    D1,D0
  1448.     MOVE.L    D0,(A1)
  1449.     ADDA.L    A3,A1
  1450. L026E6    CMPA.L    A2,A1
  1451.     BNE.S    L026B6
  1452. L026EA    RTS
  1453. L026EC    MOVE.L    D6,(A1)+
  1454.     DBF    D0,L026EC
  1455.     BRA.S    L026C4
  1456. L026F4    EOR.L    D6,(A1)+
  1457.     DBF    D0,L026F4
  1458.     BRA.S    L026C4
  1459. L026FC    LEA    0(A1,D2.W),A4
  1460. L02700    MOVE.L    (A4)+,(A1)+
  1461.     DBF    D0,L02700
  1462.     BRA.S    L026C4
  1463. L02708    MOVE.B    (A1),D6
  1464.     MOVE.B    1(A1),D7
  1465.     MOVEQ    #3,D1
  1466. L02710    MOVEQ    #0,D2
  1467.     MOVE.B    D6,D2
  1468.     LSL.B    #6,D2
  1469.     LSL.W    #1,D2
  1470.     MOVE.B    D7,D2
  1471.     LSL.B    #6,D2
  1472.     LSR.W    #6,D2
  1473.     MOVE.B    0(A4,D2.W),D2
  1474.     ROXR.B    #1,D2
  1475.     ROXR.B    #1,D7
  1476.     ROXR.B    #1,D2
  1477.     ROXR.B    #1,D7
  1478.     ROR.B    #1,D6
  1479.     ROXR.B    #1,D2
  1480.     ROXR.B    #1,D6
  1481.     DBF    D1,L02710
  1482.     MOVE.B    D6,(A1)+
  1483.     MOVE.B    D7,(A1)+
  1484.     DBF    D0,L02708
  1485.     BRA.S    L026C4
  1486. L0273E    MOVE.B    (A1),D6
  1487.     MOVE.B    1(A1),D7
  1488.     MOVEQ    #7,D1
  1489. L02746    MOVEQ    #0,D2
  1490.     MOVE.B    D6,D2
  1491.     LSL.B    #7,D2
  1492.     LSL.W    #1,D2
  1493.     MOVE.B    D7,D2
  1494.     LSL.B    #7,D2
  1495.     LSR.W    #6,D2
  1496.     MOVE.B    0(A4,D2.W),D2
  1497.     ROXR.B    #2,D2
  1498.     ROXR.B    #1,D7
  1499.     ROXR.B    #1,D2
  1500.     ROXR.B    #1,D6
  1501.     DBF    D1,L02746
  1502.     MOVE.B    D6,(A1)+
  1503.     MOVE.B    D7,(A1)+
  1504.     DBF    D0,L0273E
  1505.     BRA    L026C4
  1506. L02770:
  1507.     MOVE.W    A5,-(A7)
  1508.     MOVE.L    A4,-(A7)
  1509.     MOVE.L    D6,-(A7)
  1510.     ADDA.L    A1,A5
  1511.     MOVE.L    (A5),D2
  1512.     AND.L    D5,D2
  1513.     MOVE.L    D5,D1
  1514.     NOT.L    D1
  1515.     AND.L    D6,D1
  1516.     OR.L    D1,D2
  1517.     MOVE.L    D2,(A5)
  1518.     ADDA.L    A0,A5
  1519.     SWAP    D3
  1520.     MOVEP.W    0(A4),D1
  1521.     DC.L    $050C0001    ;*/note equ MOVEP.W 1(A4),D2
  1522.                 ;*/note A68k can't handle it
  1523.     BRA.S    L027B4
  1524. L02794:
  1525.     ADDA.L    A0,A4
  1526. L02796:
  1527.     SWAP    D1
  1528.     SWAP    D2
  1529.     MOVEP.W 0(A4),D1
  1530.     DC.L    $050C0001    ;*/note equ MOVEP.W 1(A4),D2
  1531.                 ;*/note A68k can't handle it
  1532.     MOVE.L    D1,D6
  1533.     ROR.L    D3,D6
  1534.     MOVEP.W D6,0(A1)
  1535.     MOVE.L    D2,D6
  1536.     ROR.L    D3,D6
  1537.     DC.L    $0D890001    ;*/note equ MOVEP.W D6,1(A1)
  1538.                 ;*/note A68k can't handle it
  1539.     ADDA.L    A0,A1
  1540. L027B4:
  1541.     SUBQ.W    #1,D0
  1542.     BGT.S    L02794
  1543.     BLT.S    L027BE
  1544.     MOVEA.L    A7,A4
  1545.     BRA.S    L02796
  1546. L027BE:
  1547.     MOVE.L    (A7)+,D6
  1548.     MOVEA.L    (A7)+,A4
  1549.     SWAP    D3
  1550.     BRA.S    L027CA
  1551. L027C6:
  1552.     MOVE.L    D6,(A1)
  1553.     ADDA.L    A0,A1
  1554. L027CA:
  1555.     CMPA.L    A1,A5
  1556.     BNE.S    L027C6
  1557.     MOVEA.W    (A7)+,A5
  1558.     ADDA.L    A3,A4
  1559.     SUBA.L    A0,A1
  1560.     BRA    L026C6
  1561. L027D8:
  1562.     MOVEM.L    D1-D2,-(A7)
  1563.     BSR.S    L0281E
  1564.     MOVE.W    D2,(A1)
  1565.     MOVE.W    D2,2(A1)
  1566.     LSR.B    #3,D1
  1567.     BEQ.S    L02818
  1568.     BSR.S    L0281E
  1569.     LSR.B    #3,D1
  1570.     BTST    #0,D1
  1571.     BEQ.S    L027F6
  1572.     EOR.W    D2,2(A1)
  1573. L027F6:
  1574.     CMPI.B    #$01,D1
  1575.     BEQ.S    L02818
  1576.     bsr.l    MDTSTFIX     ;*/modify BTST #3,$34(A6)
  1577.     nop            ;*/modify
  1578.     BEQ.S    L0280A
  1579.     ANDI.W    #$3333,D2    ; colour bits
  1580.     BRA.S    L0280E
  1581. L0280A:
  1582.     ANDI.W    #$5555,D2    ; colour bits
  1583. L0280E:
  1584.     EOR.W    D2,(A1)
  1585.     TST.B    D1
  1586.     BEQ.S    L02818
  1587.     EOR.W    D2,2(A1)
  1588. L02818:
  1589.     MOVEM.L    (A7)+,D1-D2
  1590.     RTS
  1591. ; ------------------------------------------------------
  1592. L0281E    MOVE.B    D1,D2
  1593.     ANDI.W    #7,D2
  1594.     ROR.L    #2,D2
  1595.     LSL.W    #7,D2
  1596.     ROL.L    #2,D2
  1597.     bsr.l    MDTSTFIX     ;*/modify BTST #3,$34(A6)
  1598.     nop            ;*/modify
  1599.     BEQ.S    L02838
  1600.     MULU    #85,D2
  1601.     BRA.S    L0283E
  1602. L02838    LSR.W    #1,D2
  1603.     MULU    #$FF,D2
  1604. L0283E    RTS
  1605. OUT_CHAR ; Write character (D2) with font (A2) at D0,D1
  1606.     MOVEM.L    D0-D7/A0-A6,-(A7)
  1607.     MOVEM.L    (A1),D6-D7    ; D7= ink mask
  1608.     BTST    #0,D1        ; odd address
  1609.     BNE.S    L02852
  1610.     SWAP    D6        ; invert mask
  1611.     SWAP    D7
  1612. L02852    ANDI.W    #$FF,D2        ; character to print
  1613.     MOVEA.L    A2,A4        ; pointer to first character
  1614.                 ; font
  1615.     SUB.B    (A4)+,D2     ; higher ?
  1616.     CMP.B    (A4)+,D2
  1617.     BLS.S    L0286A        ; no
  1618.     ADD.B    (A2),D2
  1619.     MOVEA.L    A3,A4        ; second character font
  1620.     SUB.B    (A4)+,D2
  1621.     CMP.B    (A4)+,D2
  1622.     BLS.S    L0286A        ; ok
  1623.     MOVEQ    #0,D2        ; character not printable
  1624. ; character pixel plot : D0=X,D1=Y
  1625. L0286A    ADDA.W    D2,A4        ; get value in charlist
  1626.     LSL.W    #3,D2
  1627.     ADDA.W    D2,A4
  1628.     move.l    SD_SCRB(a0),a1    ;*/modify MOVEA.L  #$20000,A1
  1629.     nop            ;*/modify ; screen start
  1630.     LSL.W    #7,D1        ; Y*128
  1631.     ADDA.W    D1,A1        ; Y address
  1632.     MOVE.W    D0,D1        ; X -> D1
  1633.     LSR.W    #3,D0        ; extract byte in X -
  1634.                 ; Direction
  1635.     ADD.W    D0,D0        ; only even address
  1636.     ADDA.W    D0,A1        ; address of byte
  1637.     ANDI.W    #7,D1        ; extract Bits to be set
  1638.     MOVEA.W    #$FFFF,A5
  1639.     BTST    #0,D3        ; underline bit ?
  1640.     BEQ.S    L02892        ; no
  1641.     ADDQ.W    #2,A5        ;*/undomend ADDQ.L #2,A5
  1642. L02892    MOVEQ    #0,D0
  1643.     MOVEQ    #$7E,D2
  1644.     ADD.W    D2,D2        ; D2= $FC
  1645.     MOVEQ    #0,D5
  1646.     BTST    #6,D3        ; double width ?
  1647.     BEQ.S    L028B4
  1648.     MOVEQ    #-1,D0
  1649.     MOVE.W    #$FFF0,D2
  1650.     ADDQ.W    #8,D1        ; bits to be set
  1651.     BTST    #1,D3        ; flash ?
  1652.     BEQ.S    L028B4
  1653.     MOVE.W    #$4010,D5
  1654.     ROR.L    D1,D5        ; bits to be set
  1655. L028B4    BTST    #5,D3        ; extendet width ?
  1656.     BEQ.S    L028BC
  1657.     ASR.B    #4,D2
  1658. L028BC    MOVEQ    #0,D4
  1659.     BTST    #4,D3        ; double height bit
  1660.     BEQ.S    L028C6
  1661.     MOVEQ    #-1,D4
  1662. L028C6    ROR.L    D1,D2
  1663.     lea    L02924(pc),a3    ;*/modify LEA L02924(PC),A6
  1664.                 ; pixel plot mode (PAPER
  1665.                 ; background)
  1666.     BTST    #2,D3        ; transparent background ?
  1667.     BEQ.S    L028E0
  1668.     lea    L0293A(pc),a3    ;*/modify LEA L0293A(PC),A6
  1669.                 ; pixel exor mode (now
  1670.     BTST    #3,D3        ; XOR character ?
  1671.     BEQ.S    L028E0
  1672.     lea    L02936(pc),a3    ;*/modify LEA L02936(PC),A6
  1673.                 ; pixel set mode
  1674.                 ; (transparent background)
  1675. L028E0    MOVEA.L    A1,A2        ; address on screen
  1676.     MOVE.B    D2,D0        ; copy byte to print in long
  1677.                 ; word
  1678.     LSL.W    #8,D2
  1679.     MOVE.B    D0,D2
  1680.     LSL.W    #8,D5
  1681.     MOVE.W    #9,D0        ; number of pixel rows per
  1682.                 ; character
  1683.     MOVEQ    #0,D3
  1684.     BRA.S    L0291C        ; address to odd mask
  1685. L028F2    MOVEQ    #0,D3
  1686.     CMP.W    A5,D0        ; underline ?
  1687.     BNE.S    L028FE
  1688.     MOVEQ    #-1,D3
  1689.     ADDQ.W    #1,A4        ;*/undomend ADDQ.L #1,A4
  1690.     BRA.S    L02914
  1691. L028FE    MOVE.B    (A4)+,D3     ; char-matrix in D3
  1692.     BEQ.S    L0291C
  1693.     TST.L    D0        ; 6 or 8 pixel size
  1694.     BGE.S    L0290C
  1695.     LSR.B    #1,D3
  1696.     MOVE.W    CVT_6_12(PC,D3.W),D3 ; convert-table 6*9 to
  1697.                    ; 12*9
  1698. L0290C    ROR.W    D1,D3        ; Calculate any pixel
  1699.                 ; depending on size
  1700.     MOVE.B    D3,D4        ; and char matrix
  1701.     LSL.W    #8,D3
  1702.     MOVE.B    D4,D3
  1703. L02914    AND.W    D2,D3
  1704.     MOVE.W    D3,D4
  1705.     SWAP    D3
  1706.     MOVE.W    D4,D3        ; AND pattern in D3
  1707. L0291C    MOVE.W    D3,D4
  1708.     AND.W    D7,D4
  1709.     OR.W    D5,D4        ; pixel bits in D4
  1710.     jmp    (a3)        ;*/modify JMP (A6)
  1711.                 ; 293A/2936/2924
  1712. ; pixel plot mode
  1713. L02924    EOR.W    D2,D3
  1714.     AND.W    D6,D3
  1715.     OR.W    D4,D3
  1716.     MOVE.W    D2,D4
  1717.     NOT.W    D4
  1718.     AND.W    (A1),D4        ; keep old pixels
  1719.     OR.W    D3,D4        ; insert new ones
  1720.     MOVE.W    D4,(A1)        ; set pixel
  1721.     BRA.S    L02942
  1722. ; pixel eor mode
  1723. L02936    EOR.W    D4,(A1)        ; exor pixel
  1724.     BRA.S    L02942
  1725. L0293A    NOT.W    D3
  1726. ; pixel set mode
  1727.     AND.W    (A1),D3        ; keep old  pixels
  1728.     OR.W    D4,D3        ; insert new ones
  1729.     MOVE.W    D3,(A1)        ; set pixel
  1730. L02942    SWAP    D6
  1731.     SWAP    D7
  1732.     ADDA.W    #$80,A1
  1733.     TST.L    D4        ; normal size
  1734.     BGE.S    L02956        ; yes
  1735.     SWAP    D3        ; get other part of
  1736.                 ; character
  1737.     BCHG    #30,D4
  1738.     BNE.S    L0291C        ; plot other part
  1739. L02956    DBF    D0,L028F2    ; next pixel row for
  1740.                 ; character
  1741.     CLR.W    D2
  1742.     ROL.L    #8,D2
  1743.     BEQ.S    L02976        ; character written -> end
  1744.     CLR.W    D5
  1745.     ROL.L    #8,D5
  1746.     SUBQ.B    #8,D1
  1747.     ANDI.B    #15,D1
  1748.     MOVEA.L    A2,A1
  1749.     ADDQ.W    #2,A1        ;*/undomend ADDQ.L #2,A1
  1750.     SUBA.W    #9,A4
  1751.     BRA    L028E0        ; double height or double
  1752.                 ; width ??
  1753. L02976    MOVEM.L    (A7)+,D0-D7/A0-A6
  1754.     RTS
  1755. ; ******************************************************
  1756. ; *     End of graphic subroutines ??         *
  1757. ; ******************************************************
  1758. ; screen-pixel translate code
  1759. ; transfers 6*9 matrix to 12*9matrix
  1760. L0297C:
  1761. CVT_6_12:
  1762.     DC.L    $00000030,$00C000F0,$03000330,$03C003F0
  1763.     DC.L    $0C000C30,$0CC00CF0,$0F000F30,$0FC00FF0
  1764.     DC.L    $30003030,$30C030F0,$33003330,$33C033F0
  1765.     DC.L    $3C003C30,$3CC03CF0,$3F003F30,$3FC03FF0
  1766.     DC.L    $C000C030,$C0C0C0F0,$C300C330,$C3C0C3F0
  1767.     DC.L    $CC00CC30,$CCC0CCF0,$CF00CF30,$CFC0CFF0
  1768.     DC.L    $F000F030,$F0C0F0F0,$F300F330,$F3C0F3F0
  1769.     DC.L    $FC00FC30,$FCC0FCF0,$FF00FF30,$FFC0FFF0
  1770. ; --------------------------------------------------------------
  1771. ;*/endfile
  1772.